#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_buzzer.h"
#include "systick.h"
#include "bsp_key.h"
#include "bsp_seg_595.h"

extern uint8_t SEG_Code[16];
uint8_t key1_pressed_flag=0;
uint8_t key2_pressed_flag=0;

void KEY_SCAN_FLAG(void)
{
	static uint8_t key1_old=1,key2_old=1;
		uint8_t key1_now,key2_now;
	
	key1_now=GetKEY1();
	if(key1_old==1 && key1_now==0){
		key1_pressed_flag=1;
	}
	key1_old=key1_now;
	
	key2_now=GetKEY2();
	if(key2_old==1 && key2_now==0){
		key2_pressed_flag=1;
	}
	key2_old=key2_now;
	
	
}

// 直接使用字符来显示（例如 '0','1','A' 等）
// 示例输入变量，main 中直接修改此变量即可让数码管显示对应字符
// 注意：只支持 '0'-'9', 'A'-'F', 'a'-'f' 范围内的字符
char input = '6';

int main(void)
{
	
	SysTick_Init(); 
	KEY_GPIO_Config();
  SEG_595_GPIO_Config();
	LED_GPIO_Config();
	BUZZER_GPIO_Config();
	BUZZER_InitState();
	


	while (1)
	{
	// 直接传入字符，无需外部提供段码索引
	
	 
		
		KEY_SCAN_FLAG();
		if(key1_pressed_flag){
			key1_pressed_flag=0;
			++input;
			// 边界检查：防止越界
			if(input == '9' + 1) input = 'A';    // 数字9后跳到字母A
			else if(input == 'F' + 1) input = '0'; // 大写F后跳到小写a
			
		}
		
		if(key2_pressed_flag){
			key2_pressed_flag=0;
			--input;
			// 边界检查：防止越界
			if(input == 'A' - 1) input = '9';    // 字母A前回到数字9
			else if(input == '0' - 1) input = 'F'; // 数字0前循环到大写F
		}
    
		SendChar_595(input);
		SysTick_Delay_Nms(1);

		if (!GetKEY_Miceo()) input = '0';  // 修正：检测按键返回时重置为字符'0'
		
		
  }



}
